package com.iocoder.yudao.module.erp.service.warehouse;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import com.iocoder.yudao.module.erp.controller.admin.stock.vo.warehouse.ErpWarehousePageVO;
import com.iocoder.yudao.module.erp.controller.admin.stock.vo.warehouse.ErpWarehouseSaveVo;
import com.iocoder.yudao.module.erp.model.warehouse.ErpWarehouseDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;

public interface ErpWarehouseService {


    /**
     * 分页查询仓库信息
     *
     * @param erpWarehousePageVO
     * @return {@link PageResult }<{@link ErpWarehouseDO }>
     */
    PageResult<ErpWarehouseDO> getWarehousePage(@Valid ErpWarehousePageVO erpWarehousePageVO);

    /**
     * 创建仓库信息
     *
     * @param warehouseSaveVo
     * @return {@link Long }
     */
    Long createWarehouse(@Valid ErpWarehouseSaveVo warehouseSaveVo);

    /**
     * 跟新仓库信息
     *
     * @param updateReqVO
     */
    void updateWarehouse(@Valid ErpWarehouseSaveVo updateReqVO);

    /**
     * 获得仓库详情
     *
     * @param id
     * @return {@link ErpWarehouseDO }
     */
    ErpWarehouseDO getWarehouse(Long id);

    /**
     * 更新仓库默认状态
     *
     * @param id
     * @param defaultStatus
     */
    void updateWarehouseDefaultStatus(Long id, Boolean defaultStatus);

    /**
     * 删除仓库
     *
     * @param id
     */
    void deleteWarehouse(Long id);

    /**
     * 获得仓库数据map
     *
     * @param ids 数组编号
     * @return {@link Map }<{@link Long }, {@link ErpWarehouseDO }>
     */
   default Map<Long, ErpWarehouseDO> getWarehouseMap(Collection<Long> ids){

    return  convertMap(getWarehouseList(ids),ErpWarehouseDO::getId);
   }


    /**
     * 获得仓库数据List
     *
     * @param ids
     * @return {@link List }<{@link ErpWarehouseDO }>
     */
    List<ErpWarehouseDO> getWarehouseList(Collection<Long> ids);
}
